package Learn;

import java.util.Arrays;
import java.util.Comparator;

public class LambdaDemo1 {

    //Lambda 函数式编程思想  强调谁去做而不是做什么
    //JDK8之后的 () 对应着方法的形参 -> 指向后面的{}方法体
    //作用   ：简化匿名内部类

    //只能简化函数式接口的匿名内部类 函数式接口就是只有一个非重写的抽象方法的接口

    //省略规则 参数类型可以省略不写
    //只有一个参数 类型可以省略 ()也可以省略
    //方法体的表达式只有一行的话 （大括号 分号 return ）（同时省略）可以省略不写


    public static void main(String[] args) {
        Integer []arr={1,3,4,6,7,8,5,2,9,10};


        //第二个参数是一个接口 需要传接口的实现类对象 而我们只用一次 所以用匿名内部类的方式传参即可

        //o1是无序序列中的每一个元素 o2是有序序列中的元素
        //底层中将o1用二分查找的形式插入到该在的位置
        //而哦o1与二分查找时的元素进行比较的方式就是compare
        //如果返回值是大于0的那么就跟后面的数据进行比较
        //反之亦然
        //如果等于0那么也跟后面的数据进行比较（相当于插入在相等的元素后面）


//        Arrays.sort(arr, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2-o1;
//            }
//        });

//
//        Arrays.sort(arr, (Integer o1, Integer o2) ->{
//                return o2-o1;
//            }
//        );
//
//        System.out.println(Arrays.toString(arr));


//        method(new Swim() {
//            @Override
//            public void swimming1() {
//                System.out.println("正在游戏——");
//            }
//        });


//        method( ()  ->  {
//            System.out.println("游泳哦——");
//        }
//               );


        //省略写法
        method(  () -> System.out.println("游泳哦——"));

    }
    public static void method(Swim s){
        s.swimming1();
    }

    @FunctionalInterface//校验是否只有一个非重写的抽象方法
interface Swim{
        public abstract void swimming1();
}

}
